/**
 * 扩展 easyui 的 messager 控件
 */

(function($){

    $.extend($.messager.defaults,{
        ok:"确定",
        cancel:"取消"
    });

    /**
     * 原生的消息框
     */
    if(!$.messager.original){
        $.messager.original = {
            show: $.messager.show,
            showUp: $.messager.show,
            alert: $.messager.alert,
            confirm: $.messager.confirm,
            prompt: $.messager.prompt,
            progress: $.messager.progress
        };
    }

    var defaults={
        title:"提示",
        msg:"操作成功！",
        icon:"info",
        showSpeed:500,
        timeout:5000
    }

    /**
     * 扩展消息框
     */
    $.extend($.messager,{
        /**
         * 重写 $.messager.show 方法，支持以下多重重载方式
         *  $.messager.show(msg)
         *  $.messager.show(title,msg)
         *  $.messager.show(options)，options 的格式与官方easyui messager show的是一样的
         *
         */
        show:function(title,msg){
            var type = typeof arguments[0];
            if (type != "object" && type != "function") {
                if (arguments.length == 1) {
                    var opts= $.extend({},defaults,{msg: arguments[0]});
                    return $.messager.show(opts);
                }
                if (arguments.length > 1) {
                    var o = { title: arguments[0], msg: arguments[1] };
                    var opts= $.extend({},defaults,o);
                    return $.messager.show(opts);
                }
            }
            var opts = $.extend({}, defaults, arguments[0] || {});
            return $.messager.original.show(opts);
        },
        /**
         * $.messager.showUp 与 $.messager.show 一样，但是限定显示位置在 top center
         *  $.messager.showUp(msg)
         *  $.messager.showUp(title,msg)
         *  $.messager.showUp(options)，options 的格式与官方easyui messager show的是一样的，但是 style 属性被限制
         *
         */
        showUp:function(title,msg){
            var type = typeof arguments[0];
            if (type != "object" && type != "function") {
                if (arguments.length == 1) {
                    var opts= $.extend({},defaults,{msg: arguments[0]});
                    return $.messager.showUp(opts);
                }
                if (arguments.length > 1) {
                    var o = { title: arguments[0], msg: arguments[1] };
                    var opts= $.extend({},defaults,o);
                    return $.messager.showUp(opts);
                }
            }
            var opts = $.extend({}, defaults, arguments[0] || {},{style: { right: '', top: document.body.scrollTop + document.documentElement.scrollTop, bottom: '' }});
            return $.messager.original.showUp(opts);
        },
        /**
         * 重写 $.messager.alert 方法，支持以下多种重载方式
         *  $.messager.alert(msg)
         *  $.messager.alert(title, msg)
         *  $.messager.alert(msg, fn)
         *  $.messager.alert(title, msg, icon)
         *  $.messager.alert(title, msg, fn)
         *  $.messager.alert(title, msg, icon, fn)
         *  $.messager.alert(options)，options 的格式与官方easyui messager alert的是一样的
         *
         */
        alert:function(title,msg,icon,fn){
            var type = typeof arguments[0];
            if (type != "object" && type != "function") {
                if (arguments.length == 1) {
                    var opts= $.extend({},defaults,{msg: arguments[0]});
                    return $.messager.alert(opts);
                }
                if (arguments.length == 2) {
                    var o = $.isFunction(arguments[1])
                        ? { msg: arguments[0], fn: arguments[1] }
                        : { title: arguments[0], msg: arguments[1] };
                    var opts= $.extend({},defaults,o);
                    return $.messager.alert(opts);
                }
                if (arguments.length == 3) {
                    var o = $.isFunction(arguments[2])
                        ? { title: arguments[0], msg: arguments[1], fn: arguments[2] }
                        : { title: arguments[0], msg: arguments[1], icon: arguments[2] };
                    var opts= $.extend({},defaults,o);
                    return $.messager.alert(opts);
                }
                if (arguments.length > 3) {
                    return $.messager.alert({ title: arguments[0], msg: arguments[1], icon: arguments[2], fn: arguments[3] });
                }
            }
            var opts = $.extend({}, defaults, arguments[0] || {});
            return $.messager.original.alert(opts);
        },
        /**
         * 重写 $.messager.confirm 方法，支持以下多中重载方式
         *  $.messager.confirm(msg)
         *  $.messager.confirm(title,msg)
         *  $.messager.confirm(msg,fn)
         *  $.messager.confirm(title,msg,fn)
         *  $.messager.confirm(options)，options 的格式与官方easyui messager confirm的是一样的
         *
         */
        confirm:function(title,msg,fn){
            var type = typeof arguments[0];
            if (type != "object" && type != "function") {
                if (arguments.length == 1) {
                    return $.messager.confirm({ msg: arguments[0] });
                }
                if (arguments.length == 2) {
                    var options = $.isFunction(arguments[1])
                        ? { msg: arguments[0], fn: arguments[1] }
                        : { title: arguments[0], msg: arguments[1] };
                    return $.messager.confirm(options);
                }
                if (arguments.length > 2) {
                    return $.messager.confirm({ title: arguments[0], msg: arguments[1], fn: arguments[2] });
                }
            }
            var opts = $.extend({}, {title:"操作提示",msg:"确定执行该操作？"}, arguments[0] || {});
            return $.messager.original.confirm(opts);
        },
        /**
         * 重写 $.messager.promt 方法，支持以下多种重载方式
         *  $.messager.promt(msg)
         *  $.messager.promt(title,msg)
         *  $.messager.promt(msg,fn)
         *  $.messager.promt(title,msg,fn)
         *  $.messager.promt(options)，options 的格式与官方easyui messager prompt是一样的
         *
         */
        prompt:function(title,msg,fn){
            var type = typeof arguments[0];
            if (type != "object" && type != "function") {
                if (arguments.length == 1) {
                    return $.messager.prompt({ msg: arguments[0] });
                }
                if (arguments.length == 2) {
                    var options = $.isFunction(arguments[1])
                        ? { msg: arguments[0], fn: arguments[1] }
                        : { title: arguments[0], msg: arguments[1] };
                    return $.messager.prompt(options);
                }
                if (arguments.length > 2) {
                    return $.messager.prompt({ title: arguments[0], msg: arguments[1], fn: arguments[2] });
                }
            }
            var opts = $.extend({}, {title:"输入提示",msg:"请输入："}, arguments[0] || {});
            return $.messager.original.prompt(opts);
        },
        /**
         * 重写 $.messager.progress，支持以下多种重载方式
         *  $.messager.progress(msg)
         *  $.messager.progress(msg, interval)
         *  $.messager.progress(title, msg)
         *  $.messager.progress(title, msg, text)
         *  $.messager.progress(title, msg, interval)
         *  $.messager.progress(title, msg, text, interval)
         *  $.messager.progress(title, msg, interval, text)
         *  $.messager.progress(options)，options 的格式与官方easyui messager progress是一样的
         *  $.messager.progress(method)，method 与官方easyui messager progress是一样的，为 String 类型，只能为 "bar" 或者 "close"
         */
        progress:function(title, msg, text, interval){
            var type = typeof arguments[0];
            if (type != "object" && type != "function") {
                if (arguments.length == 1) {
                    var msg = arguments[0], tmp = String(msg).toLowerCase(), str = $.trim(tmp);
                    return (str == "bar" || str == "close")
                        ? $.messager.original.progress(str)
                        : $.messager.progress({ msg: msg });
                }
                if (arguments.length == 2) {
                    var options = $.isNumeric(arguments[1])
                        ? { msg: arguments[0], interval: arguments[1] }
                        : { title: arguments[0], msg: arguments[1] };
                    return $.messager.progress(options);
                }
                if (arguments.length == 3) {
                    var options = $.isNumeric(arguments[2])
                        ? { title: arguments[0], msg: arguments[1], interval: arguments[2] }
                        : { title: arguments[0], msg: arguments[1], text: arguments[2] };
                    return $.messager.progress(options);
                }
                if (arguments.length > 3) {
                    var options = $.isNumeric(arguments[3])
                        ? { title: arguments[0], msg: arguments[1], text: arguments[2], interval: arguments[3] }
                        : { title: arguments[0], msg: arguments[1], text: arguments[3], interval: arguments[2] };
                    return $.messager.progress(options);
                }
            }
            var opts = $.extend({}, {title:"进度提示",msg:"请稍候...",interval:1000}, arguments[0] || {});
            return $.messager.original.progress(opts);
        }
    });

    $.union($.messager.show, $.messager.original.show);
    $.union($.messager.showUp, $.messager.original.showUp);
    $.union($.messager.alert, $.messager.original.alert);
    $.union($.messager.confirm, $.messager.original.confirm);
    $.union($.messager.prompt, $.messager.original.prompt);
    $.union($.messager.progress, $.messager.original.progress);

})(jQuery);